package com.zyf.project.capchain.listener.result.template;

import com.zyf.project.capchain.listener.result.impl.Result;
import com.zyf.project.capchain.listener.state.impl.CommonState;
import com.zyf.project.capchain.listener.state.impl.WxLoginState;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;

/**
 * <h1>处理一般业务返回结果</h1>
 * <p>系统欸错误不负责处理，仅处理返回码200的状态，所涉及的均为业务逻辑</p>
 *
 * @author Zhou Yifan
 */
@Slf4j
@Component
public class ResultTemplate<D> {

    /**
     * 操作成功的 Result
     *
     * @param result 处理结果
     * @param data   处理数据
     */
    public void success(@NotNull Result<D> result, D data) {
        result.setResult(CommonState.SUCCESS, data);
        log.info(result.toString());
    }

    /**
     * 操作失败的 Result
     *
     * @param result 处理结果
     * @param data   处理数据
     */
    public void failed(@NotNull Result<D> result, D data) {
        result.setResult(CommonState.FAILED, data);
        log.info(result.toString());
    }

    public void wxLoginSuccess(@NotNull Result<D> result, D data) {
        result.setResult(WxLoginState.WX_LOGIN_SUCCESS, data);
        log.info(result.toString());
    }

    /**
     * 特殊情况的错误，一般为系统错误等
     *
     * @param message 错误消息
     * @param code    错误代码
     * @param data    错误数据
     * @return 返回结果
     */
    public Result<D> specialError(String message, Integer code, D data) {
        Result<D> result = new Result<>();
        result.setMessage(message);
        result.setCode(code);
        result.setData(data);
        return result;
    }

}
